

 /*
 This file '_progressbar' is part of Firebird Integrated Solution 1.0

 Copyright (c) 2015 Lincong

 Contact:  
        Email: lincong1987@gmail.com

        QQ: 159257119
 
 See Usage at http://www.jplatformx.com/firebird

 Create date: 2015-07-14 04:45
 */


 (function ($, undefined) {

     $.widget("ui.progressbar", {
         version: "1.9.2",
         options: {
             value: 0,
             max: 100
         },

         min: 0,

         _create: function () {
             this.element
                 .addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all")
                 .attr({
                     role: "progressbar",
                     "aria-valuemin": this.min,
                     "aria-valuemax": this.options.max,
                     "aria-valuenow": this._value()
                 });

             this.valueDiv = $("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>")
                 .appendTo(this.element);

             this.oldValue = this._value();
             this._refreshValue();
         },

         _destroy: function () {
             this.element
                 .removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all")
                 .removeAttr("role")
                 .removeAttr("aria-valuemin")
                 .removeAttr("aria-valuemax")
                 .removeAttr("aria-valuenow");

             this.valueDiv.remove();
         },

         value: function (newValue) {
             if (newValue === undefined) {
                 return this._value();
             }

             this._setOption("value", newValue);
             return this;
         },

         _setOption: function (key, value) {
             if (key === "value") {
                 this.options.value = value;
                 this._refreshValue();
                 if (this._value() === this.options.max) {
                     this._trigger("complete");
                 }
             }

             this._super(key, value);
         },

         _value: function () {
             var val = this.options.value;
             // normalize invalid value
             if (typeof val !== "number") {
                 val = 0;
             }
             return Math.min(this.options.max, Math.max(this.min, val));
         },

         _percentage: function () {
             return 100 * this._value() / this.options.max;
         },

         _refreshValue: function () {
             var value = this.value(),
                 percentage = this._percentage();

             if (this.oldValue !== value) {
                 this.oldValue = value;
                 this._trigger("change");
             }

             this.valueDiv
                 .toggle(value > this.min)
                 .toggleClass("ui-corner-right", value === this.options.max)
                 .width(percentage.toFixed(0) + "%");
             this.element.attr("aria-valuenow", value);
         }
     });

 })(jQuery);